// ==UserSubscribe==
// @name         抖音知识产权选择辅助
// @namespace    http://tampermonkey.net/
// @version      0.1
// @author       楚子风
// @match        https://ippro.bytedance.com/view/ip/list*
// @grant        none
// @scriptUrl    https://gitee.com/chuzifeng/script-cat-script/raw/master/抖音知识产权选择辅助.js
// ==/UserSubscribe==

(function() {
    'use strict';

    // ===== 集中定义所有XPath =====
    const 路径_抽屉标题容器 = '//*[@class="auxo-drawer-title"]';
    const 路径_组合框节点 = '//*[@title="知识产权"]/parent::div/following-sibling::*';
    const 路径_搜索目标元素 = (输入值) => `//div[contains(@title, '${输入值}') and @aria-selected='false'][1]`;
    const 路径_下拉弹出层任意元素 = "//div[contains(@class, 'auxo-select-dropdown')]";  // 判断下拉是否弹出

    // 监听网页变化
    const 观察器 = new MutationObserver(() => {
        const 抽屉标题容器 = document.evaluate(
            路径_抽屉标题容器,
            document,
            null,
            XPathResult.FIRST_ORDERED_NODE_TYPE,
            null
        ).singleNodeValue;

        if (抽屉标题容器 && !document.getElementById('自定义输入容器')) {
            console.log('[子风脚本] 找到 auxo-drawer-title，开始创建输入框');
            创建输入框和按钮(抽屉标题容器);
        }
    });

    观察器.observe(document.body, { childList: true, subtree: true });

    function 创建输入框和按钮(父容器) {
        const 外壳 = document.createElement('div');
        外壳.id = '自定义输入容器';
        外壳.style.position = 'relative';
        外壳.style.marginTop = '10px';
        外壳.style.display = 'flex';
        外壳.style.justifyContent = 'center';
        外壳.style.alignItems = 'center';
        外壳.style.zIndex = '9999';

        const 输入框 = document.createElement('input');
        输入框.type = 'text';
        输入框.placeholder = '请输入数字';
        输入框.style.padding = '5px';
        输入框.style.fontSize = '14px';
        输入框.style.marginRight = '10px';
        输入框.id = '数字输入框';

        const 按钮 = document.createElement('button');
        按钮.innerText = '确定';
        按钮.style.padding = '5px 10px';
        按钮.style.cursor = 'pointer';
        按钮.onclick = 点击确定按钮;

        外壳.appendChild(输入框);
        外壳.appendChild(按钮);
        父容器.appendChild(外壳);

        输入框.addEventListener('keydown', function(event) {
            if (event.key === 'Enter') {
                event.preventDefault();
                按钮.click();
            }
        });
    }

    async function 点击确定按钮() {
        const 输入值 = document.getElementById('数字输入框').value.trim();
        if (!输入值) {
            显示软提示('请输入知识产权编号');
            return;
        }

        try {
            const 组合框节点 = document.evaluate(
                路径_组合框节点,
                document,
                null,
                XPathResult.FIRST_ORDERED_NODE_TYPE,
                null
            ).singleNodeValue;

            if (!组合框节点) {
                显示软提示('未找到知识产权组合框');
                return;
            }

            console.log('[子风脚本] 点击展开组合框');
            组合框节点.click();

            // 等待下拉列表真正出现
            const 下拉出现成功 = await 等待元素出现(路径_下拉弹出层任意元素, 3000);
            if (!下拉出现成功) {
                显示软提示('下拉列表未弹出，无法继续');
                return;
            }

            console.log('[子风脚本] 下拉已弹出，准备搜索元素');

            const 目标元素 = document.evaluate(
                路径_搜索目标元素(输入值),
                document,
                null,
                XPathResult.FIRST_ORDERED_NODE_TYPE,
                null
            ).singleNodeValue;

            if (!目标元素) {
                显示软提示(`未找到 title 包含 ${输入值} 的元素`);
                return;
            }

            console.log('[子风脚本] 找到目标元素，准备点击');
            目标元素.scrollIntoView({ behavior: 'smooth', block: 'center' });
            目标元素.click();
            显示软提示(`成功选择：${输入值}`);

        } catch (错误) {
            console.error('[子风脚本] 出错：', 错误);
            显示软提示('执行出错，请查看控制台');
        }
    }

    function 延迟(毫秒数) {
        return new Promise(resolve => setTimeout(resolve, 毫秒数));
    }

    async function 等待元素出现(xpath表达式, 最大等待时间毫秒) {
        const 起始时间 = Date.now();
        while (Date.now() - 起始时间 < 最大等待时间毫秒) { // 🔥这里改了
            const 节点 = document.evaluate(
                xpath表达式,
                document,
                null,
                XPathResult.FIRST_ORDERED_NODE_TYPE,
                null
            ).singleNodeValue;
            if (节点) {
                return true;
            }
            await 延迟(100);
        }
        return false;
    }


    function 显示软提示(消息文本) {
        const 提示框 = document.createElement('div');
        提示框.innerText = 消息文本;
        提示框.style.position = 'fixed';
        提示框.style.top = '10%';
        提示框.style.left = '50%';
        提示框.style.transform = 'translateX(-50%)';
        提示框.style.background = 'rgba(0, 0, 0, 0.7)';
        提示框.style.color = '#fff';
        提示框.style.padding = '8px 16px';
        提示框.style.borderRadius = '6px';
        提示框.style.fontSize = '14px';
        提示框.style.zIndex = '10000';
        document.body.appendChild(提示框);

        setTimeout(() => {
            提示框.remove();
        }, 2000);
    }

})();
